// 底部导航栏

import 'package:flutter/material.dart';
import 'package:flutter_house_manager/constants/build_controller.dart';
import 'package:flutter_house_manager/pages/Home/index.dart';
import 'package:flutter_house_manager/pages/Mine/index.dart';
import 'package:flutter_house_manager/utils/Emitter.dart';
import 'package:flutter_house_manager/utils/TokenManager.dart';
import 'package:get/get.dart';

class TabsPage extends StatefulWidget {
  const TabsPage({super.key});

  @override
  State<TabsPage> createState() => _TabsPageState();
}

class _TabsPageState extends State<TabsPage> {
  // 底部导航栏
  final List _tabList = [
    {
      "label": '首页',
      "icon": "assets/tabs/home_default.png",
      "active_icon": "assets/tabs/home_active.png"
    },
    {
      "label": '我的',
      "icon": "assets/tabs/my_default.png",
      "active_icon": "assets/tabs/my_active.png"
    }
  ];

  /// 目的是: 添加和编辑房屋都需要用到这个控制器, 所以把控制器的加入提前到tabs页面
  BuildController buildController = Get.put<BuildController>(BuildController());
  // 返回底部tabBar的数组item
  List<BottomNavigationBarItem> _getTabsBar() {
    // 定义空数组存值
    List<BottomNavigationBarItem> list = [];
    // 遍历数据
    for (var item in _tabList) {
      list.add(BottomNavigationBarItem(
        icon: Image.asset(
          // 默认的icon
          item["icon"],
          width: 30,
          height: 30,
        ),
        activeIcon: Image.asset(
          // 点击之后的icon
          item["active_icon"],
          width: 30,
          height: 30,
        ),
        label: item["label"], // 底部显示的文本
      ));
    }
    return list;
  }

  // 默认当前选中的索引
  int _currentIndex = 0;

  // 注册监听事件
  registerEvent() {
    // 1. 401退出登录处理
    eventBus.on<LogoutEvent>().listen((event) {
      // 1. 清空token
      tokenManager.removeToken();
      // 2. 跳转到登录页
      Navigator.pushNamed(context, '/login');
    });
  }

  // 初始化token
  @override
  void initState() {
    super.initState();
    tokenManager.init();
    // 2. 注册监听事件
    registerEvent();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // body: 主体内容区域
      body: SafeArea(
        child: IndexedStack(
          // 根据IndexedStack堆叠组件，根据当前索引显示对应的组件（首页或我的）
          index: _currentIndex,
          children: [
            const HomePage(),
            // 传值
            MinePage(currentIndex: _currentIndex),
          ],
        ),
      ),
      // BottomNavigationBar 与body体同级 - 是底部的TabBar
      bottomNavigationBar: BottomNavigationBar(
        // selectedItemColor：选中项的文字颜色
        selectedItemColor: const Color.fromARGB(255, 85, 145, 175),
        items: _getTabsBar(), // 要渲染的内容数组，这里提取成方法
        currentIndex: _currentIndex, // 当前选中的索引
        onTap: (index) {
          // 点击事件，切换索引
          setState(() {
            _currentIndex = index;
          });
        },
      ),
    );
  }
}
